//牛客 JZ31 栈的压入、弹出序列
//思路：我们写一个栈，来模拟实现
//我们先将pushV里面的元素入栈，入栈取栈顶元素与popV的popi位置比，一样就出栈
//当栈为空或者栈顶元素与popi位置元素不一致就停止，然后入栈
//最后栈为空就说明出栈顺序是正确的

#include <stack>
#include <vector>
using namespace std;

class Solution {
public:
    bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {
        // write code here
        stack<int> st;
        int pushi = 0;
        int popi = 0;
        while(pushi < pushV.size())
        {
            st.push(pushV[pushi]);
            while(!st.empty() && st.top() == popV[popi])// 先判空，否则会越界
            {
                st.pop();
                popi++;
            }
            pushi++;
        }
        return st.empty();
    }
};